{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ch04/gradient_1d.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.1999999999990898\n"
     ]
    },
    {
     "data": {
      "image/png": "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d+zYwZEjR4p/WrRoUQ0TX5h27dqVmHXTpk3nXNeV9t9pCQkJJbZv4cKFANxxxx1lPs9Z92F2djYdO3bko48+KvXx//znP7z77rt89NFHJCQkEBERwdVXX118T6/SrFy5krvuuouhQ4eyYcMGhg4dyp133kl8fHxVbUaZytrGnJwc1q1bx9///nfWrVvHnDlz2LlzJzfddNN5XzckJKTEPj1y5AgBAQFVsQnndb79CHDttdeWmPWnn34q8zWdaT+eb/vO3g9TpkzBYrFw2223lfm6zrIPy/P54HTvRcNDde/e3Xj44YdLLGvdurXxwgsvlLr+c889Z7Ru3brEsr/97W9Gz549q2zGypKWlmYAxpIlS865zh9//GEAxvHjx6tvsIvwyiuvGB07diz3+q68/0578sknjebNmxt2u73Ux11pHwLG3Llzi/9st9uNiIgIY9y4ccXL8vLyjNDQUOPTTz895+vceeedxrXXXlti2TXXXGMMHjy40meuqLO3sTSrV682AGPfvn3nXGfq1KlGaGho5Q5XSUrbxmHDhhk333xzhV7HWfdjefbhzTffbFxxxRVlruPM+/DszwdnfC965BGVgoIC1q5dy4ABA0osHzBgACtWrCj1OStXrvzL+tdccw1r1qyhsLCwymatDJmZmQDUqVPnvOt27tyZBg0acOWVV/LHH39U9WgXJSkpicjISJo2bcrgwYNJTk4+57quvP/A8Xd2+vTpjBgx4rw34HSlfXjanj17SElJKbGP/P39ufTSS8/5noRz79eynuNMMjMzsVgs1KpVq8z1Tp48SXR0NI0aNeKGG24gMTGxega8QIsXL6Z+/fq0bNmSkSNHkpaWVub6rrofU1NTmT9/Pg888MB513XWfXj254Mzvhc9Mqikp6djs9kIDw8vsTw8PJyUlJRSn5OSklLq+kVFRaSnp1fZrBfLMAzGjBlD3759iYmJOed6DRo0YMKECcyePZs5c+bQqlUrrrzySpYuXVqN05Zfjx49+OKLL/jll1+YOHEiKSkp9O7dm4yMjFLXd9X9d9p3333HiRMnuP/++8+5jqvtwzOdft9V5D15+nkVfY6zyMvL44UXXuCee+4p8yZvrVu3Ztq0acybN4+vv/6agIAA+vTpQ1JSUjVOW34DBw7kq6++4vfff+edd94hISGBK664gvz8/HM+x1X34+eff05wcDC33nprmes56z4s7fPBGd+LLn335It19n+ZGoZR5n+tlrZ+acudyWOPPcbGjRtZtmxZmeu1atWKVq1aFf+5V69eHDhwgLfffpv+/ftX9ZgVNnDgwOJ/bt++Pb169aJ58+Z8/vnnjBkzptTnuOL+O23y5MkMHDiQyMjIc67javuwNBV9T17oc8xWWFjI4MGDsdvtfPLJJ2Wu27NnzxIno/bp04cuXbrw4Ycf8sEHH1T1qBV21113Ff9zTEwMsbGxREdHM3/+/DI/0F1xP06ZMoUhQ4ac91wTZ92HZX0+ONN70SOPqNSrVw9vb++/JL20tLS/JMLTIiIiSl3fx8eHunXrVtmsF+Pxxx9n3rx5/PHHHzRq1KjCz+/Zs6fpib+8goKCaN++/TnndcX9d9q+fftYtGgRDz74YIWf6yr78PQVWxV5T55+XkWfY7bCwkLuvPNO9uzZw8KFC8s8mlIaLy8vunXr5hL7FRxH+qKjo8uc1xX3Y1xcHDt27Lig96Uz7MNzfT4443vRI4OKn58fXbt2Lb6K4rSFCxfSu3fvUp/Tq1evv6z/66+/Ehsbi6+vb5XNeiEMw+Cxxx5jzpw5/P777zRt2vSCXicxMZEGDRpU8nRVIz8/n23btp1zXlfaf2ebOnUq9evX5/rrr6/wc11lHzZt2pSIiIgS+6igoIAlS5ac8z0J596vZT3HTKdDSlJSEosWLbqgkGwYBuvXr3eJ/QqQkZHBgQMHypzX1fYjOI5ydu3alY4dO1b4uWbuw/N9Pjjle/GiT8d1UTNnzjR8fX2NyZMnG1u3bjVGjx5tBAUFGXv37jUMwzBeeOEFY+jQocXrJycnG4GBgcZTTz1lbN261Zg8ebLh6+trzJo1y6xNOKdHHnnECA0NNRYvXmwcOXKk+CcnJ6d4nbO377333jPmzp1r7Ny509i8ebPxwgsvGIAxe/ZsMzbhvJ5++mlj8eLFRnJysrFq1SrjhhtuMIKDg91i/53JZrMZjRs3Np5//vm/POZq+zArK8tITEw0EhMTDcB49913jcTExOIrXsaNG2eEhoYac+bMMTZt2mTcfffdRoMGDQyr1Vr8GkOHDi1xZd7y5csNb29vY9y4cca2bduMcePGGT4+PsaqVauqffsMo+xtLCwsNG666SajUaNGxvr160u8N/Pz84tf4+xtfPXVV42ff/7Z2L17t5GYmGgMHz7c8PHxMeLj483YxDK3MSsry3j66aeNFStWGHv27DH++OMPo1evXkbDhg1dZj+e7++pYRhGZmamERgYaIwfP77U13DmfViezwdney96bFAxDMP4+OOPjejoaMPPz8/o0qVLict3hw0bZlx66aUl1l+8eLHRuXNnw8/Pz2jSpMk5/5KaDSj1Z+rUqcXrnL19b775ptG8eXMjICDAqF27ttG3b19j/vz51T98Od11111GgwYNDF9fXyMyMtK49dZbjS1bthQ/7sr770y//PKLARg7duz4y2Outg9PXz599s+wYcMMw3BcFvnKK68YERERhr+/v9G/f39j06ZNJV7j0ksvLV7/tG+//dZo1aqV4evra7Ru3drUYFbWNu7Zs+ec780//vij+DXO3sbRo0cbjRs3Nvz8/IywsDBjwIABxooVK6p/404paxtzcnKMAQMGGGFhYYavr6/RuHFjY9iwYcb+/ftLvIYz78fz/T01DMP47LPPjBo1ahgnTpwo9TWceR+W5/PB2d6LllODi4iIiDgdjzxHRURERFyDgoqIiIg4LQUVERERcVoKKiIiIuK0FFRERETEaSmoiIiIiNNSUBERERGnpaAiIiIiTktBRURERJyWgoqIiIg4LQUVERERcVoKKiLiNI4ePUpERARvvPFG8bL4+Hj8/Pz49ddfTZxMRMyimxKKiFP56aefGDRoECtWrKB169Z07tyZ66+/nvfff9/s0UTEBAoqIuJ0Ro0axaJFi+jWrRsbNmwgISGBgIAAs8cSERMoqIiI08nNzSUmJoYDBw6wZs0aOnToYPZIImISnaMiIk4nOTmZw4cPY7fb2bdvn9njiIiJdERFRJxKQUEB3bt3p1OnTrRu3Zp3332XTZs2ER4ebvZoImICBRURcSrPPvsss2bNYsOGDdSsWZPLL7+c4OBgfvzxR7NHExET6KsfEXEaixcv5v333+fLL78kJCQELy8vvvzyS5YtW8b48ePNHk9ETKAjKiIiIuK0dERFREREnJaCioiIiDgtBRURERFxWgoqIiIi4rQUVERERMRpKaiIiIiI01JQEREREaeloCIiIiJOS0FFREREnJaCioiIiDgtBRURERFxWv8PPHDr2uAHszYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pylab as plt\n",
    "\n",
    "\n",
    "def numerical_diff(f, x):\n",
    "    h = 1e-4 # 0.0001\n",
    "    return (f(x+h) - f(x-h)) / (2*h)\n",
    "\n",
    "\n",
    "def function_1(x):\n",
    "    return 0.01*x**2 + 0.1*x \n",
    "\n",
    "\n",
    "def tangent_line(f, x):\n",
    "    d = numerical_diff(f, x)\n",
    "    print(d)\n",
    "    y = f(x) - d*x\n",
    "    return lambda t: d*t + y\n",
    "     \n",
    "x = np.arange(0.0, 20.0, 0.1)\n",
    "y = function_1(x)\n",
    "plt.xlabel(\"x\")\n",
    "plt.ylabel(\"f(x)\")\n",
    "\n",
    "tf = tangent_line(function_1, 5)\n",
    "y2 = tf(x)\n",
    "\n",
    "plt.plot(x, y)\n",
    "plt.plot(x, y2)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ch04/gradient_2d.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# cf.http://d.hatena.ne.jp/white_wheels/20100327/p3\n",
    "import numpy as np\n",
    "import matplotlib.pylab as plt\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "\n",
    "\n",
    "def _numerical_gradient_no_batch(f, x):\n",
    "    h = 1e-4  # 0.0001\n",
    "    grad = np.zeros_like(x)\n",
    "    \n",
    "    for idx in range(x.size):\n",
    "        tmp_val = x[idx]\n",
    "        x[idx] = float(tmp_val) + h\n",
    "        fxh1 = f(x)  # f(x+h)\n",
    "        \n",
    "        x[idx] = tmp_val - h \n",
    "        fxh2 = f(x)  # f(x-h)\n",
    "        grad[idx] = (fxh1 - fxh2) / (2*h)\n",
    "        \n",
    "        x[idx] = tmp_val  # 値を元に戻す\n",
    "        \n",
    "    return grad\n",
    "\n",
    "\n",
    "def numerical_gradient(f, X):\n",
    "    if X.ndim == 1:\n",
    "        return _numerical_gradient_no_batch(f, X)\n",
    "    else:\n",
    "        grad = np.zeros_like(X)\n",
    "        \n",
    "        for idx, x in enumerate(X):\n",
    "            grad[idx] = _numerical_gradient_no_batch(f, x)\n",
    "        \n",
    "        return grad\n",
    "\n",
    "\n",
    "def function_2(x):\n",
    "    if x.ndim == 1:\n",
    "        return np.sum(x**2)\n",
    "    else:\n",
    "        return np.sum(x**2, axis=1)\n",
    "\n",
    "\n",
    "def tangent_line(f, x):\n",
    "    d = numerical_gradient(f, x)\n",
    "    print(d)\n",
    "    y = f(x) - d*x\n",
    "    return lambda t: d*t + y\n",
    "\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    x0 = np.arange(-2, 2.5, 0.25)\n",
    "    x1 = np.arange(-2, 2.5, 0.25)\n",
    "    X, Y = np.meshgrid(x0, x1)\n",
    "    \n",
    "    X = X.flatten()\n",
    "    Y = Y.flatten()\n",
    "\n",
    "    grad = numerical_gradient(function_2, np.array([X, Y]).T).T\n",
    "\n",
    "    plt.figure()\n",
    "    plt.quiver(X, Y, -grad[0], -grad[1],  angles=\"xy\",color=\"#666666\")\n",
    "    plt.xlim([-2, 2])\n",
    "    plt.ylim([-2, 2])\n",
    "    plt.xlabel('x0')\n",
    "    plt.ylabel('x1')\n",
    "    plt.grid()\n",
    "    plt.draw()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ch04/gradient_method.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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531Pnmzte889nfetrGzt+8ADnfetqGjtW1TUed+ysta+jz7aed9du1r7rlnTed+XX27tu359532ff7617/PPd953/frWvi+/3HnfNWta++7a1XnfRx9t7VtW1nnfoqLWvhUVnfd94IHWvpWVnfe9557WvidPdt533rzWvvX1nfedPdtqo7O+t97atm96evS+N9zQtm9OTvS+Eya07TtihGXJFbYGfuWANfxHL1sjHrr44faebve8I0a0fd4JE6LXkJPTti/vERG8R0TwHtGqs749+x7hsyRZPl/bz+8LxTynZvLkyTp69GjU72dmZur666+P9em67PTp0wqFQho8eHCb84MHD9aJEyc6fExxcbE8Hk/L4fV6e60+AL3IcumTl8fLXzZSltVJN0tq8qcq+FF239UGIG7YZkPLmpoafeELX9Abb7yhwsLClvOPPPKIfvOb3+j9999v95hgMKjgeeOJfr9fXq+Xy0/d7MvQcgRDy13v293LT1Kk3vPfpVbtPKIN+yrbPa65z6O3j9NXrm6/mzeXn1rxHhHBe0TX+8b75aeYQ83y5ctVVFSk5OZ/hReoqqrSggULtHPnzlierssaGxuVnp6uF154QXfccUfL+fvuu0/l5eXas2fPRZ+DXboBZ/jDO7X6x60Vqgu0fro1+VNV92q+Th3MZZduwGF6fJfuDRs2aMKECTp8+HC77z3xxBMqKChQv34x30zVZSkpKRo/fny70LRz505NmjSp134ugPhz69hc7f/JND37nb/Rz++8Wuvn/o0+/uWNOvdf7UdoACSOmENNRUWFrrzySl177bUqLi5WOBxWVVWVpk2bph/96Ef62c9+pu3bt/dmrVq6dKmeeuop/frXv9Z7772nH/zgB6qqqtLChQt79ecCiD/JSS4Vjhqor179BU0cOVCyuruDFACniHloJSsrS//+7/+ur33ta/re976n5557TpWVlSosLNThw4f7ZBLu3//93+uTTz7RP/3TP6m2tlYFBQX6wx/+oBEjRvT6zwYAAPGtyxOFT5w4oblz5+rVV19VRkaGtm7dqhtvvLG36utRzKkBnCkUkpoXF//Sl1onoAJwhh6fUyNJzz77rK644gqFw2G99957WrRokWbMmKH77ruvT1YUBoCOJCdLU6ZEDgINkLhiDjWzZ8/Wd7/7Xa1YsUKvvvqqLr/8cj366KPa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6KOPTJdm3Pr16y1JHR6wrHnz5nX42uzatct0aX3uF7/4hTVixAgrJSXFGjdunLVnzx7TJcWFXbt2dfhvZN68eaZLMyra+8r69etNl2bct771rZbfpcsuu8y66aabrB07dpguK2asUwMAABzB2RMUAABAwiDUAAAARyDUAAAARyDUAAAARyDUAAAARyDUAAAARyDUAAAARyDUAAAARyDUAAAARyDUALCFUCikSZMm6Wtf+1qb8z6fT16vV//4j/8oKbIn1syZM5WRkaGcnBx9//vfV2Njo4mSAfQxQg0AW0hOTtbGjRtVWlqqp59+uuX8kiVLlJ2dreXLlysUCum2225TIBDQn/70J23evFkvvviifvjDHxqsHEBfYe8nALbyb//2b1qxYoUqKiq0f/9+zZkzR2VlZbr66qu1fft2feUrX1F1dbWGDh0qSdq8ebPmz5+vkydPKisry3D1AHoToQaArViWpRtvvFHJyck6fPiwlixZ0nLpafny5dq6davefvvtlv5//etflZ2drddee01Tp041VTaAPtDPdAEA0BUul0slJSUaM2aMrrzySv34xz9u+d6JEyc0ePDgNv0vvfRSpaSk6MSJE31dKoA+xpwaALbz61//Wunp6aqsrNRHH33U5nsul6tdf8uyOjwPwFkINQBs5c0339Rjjz2mrVu3qrCwUAsWLFDzVfQhQ4a0G5H561//qs8++6zdCA4A5yHUALCNc+fOad68efre976nadOm6amnntL+/fu1bt06SVJhYaEqKipUW1vb8pgdO3bI7XZr/PjxpsoG0EeYKAzANu677z698sorevvtt5WRkSFJevLJJ7V06VIdPnxYXq9XV199tQYPHqxVq1aprq5O8+fP16xZs/T4448brh5AbyPUALCFPXv26KabbtLu3bs1efLkNt/78pe/rKamJv3xj39UdXW17rnnHr322mtKS0vTN77xDa1evVput9tQ5QD6CqEGAAA4AnNqAACAIxBqAACAIxBqAACAIxBqAACAIxBqAACAIxBqAACAIxBqAACAIxBqAACAIxBqAACAIxBqAACAIxBqAACAI/x/7R4YhRqznDYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pylab as plt\n",
    "\n",
    "\n",
    "def gradient_descent(f, init_x, lr=0.01, step_num=100):\n",
    "    x = init_x\n",
    "    x_history = []\n",
    "\n",
    "    for i in range(step_num):\n",
    "        x_history.append( x.copy() )\n",
    "\n",
    "        grad = numerical_gradient(f, x)\n",
    "        x -= lr * grad\n",
    "\n",
    "    return x, np.array(x_history)\n",
    "\n",
    "\n",
    "def function_2(x):\n",
    "    return x[0]**2 + x[1]**2\n",
    "\n",
    "init_x = np.array([-3.0, 4.0])    \n",
    "\n",
    "lr = 0.1\n",
    "step_num = 20\n",
    "x, x_history = gradient_descent(function_2, init_x, lr=lr, step_num=step_num)\n",
    "\n",
    "plt.plot( [-5, 5], [0,0], '--b')\n",
    "plt.plot( [0,0], [-5, 5], '--b')\n",
    "plt.plot(x_history[:,0], x_history[:,1], 'o')\n",
    "\n",
    "plt.xlim(-3.5, 3.5)\n",
    "plt.ylim(-4.5, 4.5)\n",
    "plt.xlabel(\"X0\")\n",
    "plt.ylabel(\"X1\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ch04/gradient_simplenet.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0.17576655  0.225064   -0.40083055]\n",
      " [ 0.26364982  0.337596   -0.60124582]]\n"
     ]
    }
   ],
   "source": [
    "import sys, os\n",
    "sys.path.append(os.pardir)  # 親ディレクトリのファイルをインポートするための設定\n",
    "import numpy as np\n",
    "from common.functions import softmax, cross_entropy_error\n",
    "from common.gradient import numerical_gradient\n",
    "\n",
    "\n",
    "class simpleNet:\n",
    "    def __init__(self):\n",
    "        self.W = np.random.randn(2,3)\n",
    "\n",
    "    def predict(self, x):\n",
    "        return np.dot(x, self.W)\n",
    "\n",
    "    def loss(self, x, t):\n",
    "        z = self.predict(x)\n",
    "        y = softmax(z)\n",
    "        loss = cross_entropy_error(y, t)\n",
    "\n",
    "        return loss\n",
    "\n",
    "x = np.array([0.6, 0.9])\n",
    "t = np.array([0, 0, 1])\n",
    "\n",
    "net = simpleNet()\n",
    "\n",
    "f = lambda w: net.loss(x, t)\n",
    "dW = numerical_gradient(f, net.W)\n",
    "\n",
    "print(dW)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ch04/two_layer_net.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys, os\n",
    "sys.path.append(os.pardir)  # 親ディレクトリのファイルをインポートするための設定\n",
    "from common.functions import *\n",
    "from common.gradient import numerical_gradient\n",
    "import numpy as np\n",
    "\n",
    "\n",
    "class TwoLayerNet:\n",
    "\n",
    "    def __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01):\n",
    "        # 重みの初期化\n",
    "        self.params = {}\n",
    "        self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size)\n",
    "        self.params['b1'] = np.zeros(hidden_size)\n",
    "        self.params['W2'] = weight_init_std * np.random.randn(hidden_size, output_size)\n",
    "        self.params['b2'] = np.zeros(output_size)\n",
    "\n",
    "    def predict(self, x):\n",
    "        W1, W2 = self.params['W1'], self.params['W2']\n",
    "        b1, b2 = self.params['b1'], self.params['b2']\n",
    "    \n",
    "        a1 = np.dot(x, W1) + b1\n",
    "        z1 = sigmoid(a1)\n",
    "        a2 = np.dot(z1, W2) + b2\n",
    "        y = softmax(a2)\n",
    "        \n",
    "        return y\n",
    "        \n",
    "    # x:入力データ, t:教師データ\n",
    "    def loss(self, x, t):\n",
    "        y = self.predict(x)\n",
    "        \n",
    "        return cross_entropy_error(y, t)\n",
    "    \n",
    "    def accuracy(self, x, t):\n",
    "        y = self.predict(x)\n",
    "        y = np.argmax(y, axis=1)\n",
    "        t = np.argmax(t, axis=1)\n",
    "        \n",
    "        accuracy = np.sum(y == t) / float(x.shape[0])\n",
    "        return accuracy\n",
    "        \n",
    "    # x:入力データ, t:教師データ\n",
    "    def numerical_gradient(self, x, t):\n",
    "        loss_W = lambda W: self.loss(x, t)\n",
    "        \n",
    "        grads = {}\n",
    "        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])\n",
    "        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])\n",
    "        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])\n",
    "        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])\n",
    "        \n",
    "        return grads\n",
    "        \n",
    "    def gradient(self, x, t):\n",
    "        W1, W2 = self.params['W1'], self.params['W2']\n",
    "        b1, b2 = self.params['b1'], self.params['b2']\n",
    "        grads = {}\n",
    "        \n",
    "        batch_num = x.shape[0]\n",
    "        \n",
    "        # forward\n",
    "        a1 = np.dot(x, W1) + b1\n",
    "        z1 = sigmoid(a1)\n",
    "        a2 = np.dot(z1, W2) + b2\n",
    "        y = softmax(a2)\n",
    "        \n",
    "        # backward\n",
    "        dy = (y - t) / batch_num\n",
    "        grads['W2'] = np.dot(z1.T, dy)\n",
    "        grads['b2'] = np.sum(dy, axis=0)\n",
    "        \n",
    "        dz1 = np.dot(dy, W2.T)\n",
    "        da1 = sigmoid_grad(a1) * dz1\n",
    "        grads['W1'] = np.dot(x.T, da1)\n",
    "        grads['b1'] = np.sum(da1, axis=0)\n",
    "\n",
    "        return grads"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ch04/train_neuralnet.py"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train acc, test acc | 0.09863333333333334, 0.0958\n",
      "train acc, test acc | 0.7892666666666667, 0.7947\n",
      "train acc, test acc | 0.8764, 0.8811\n",
      "train acc, test acc | 0.8979833333333334, 0.9005\n",
      "train acc, test acc | 0.9075166666666666, 0.91\n",
      "train acc, test acc | 0.9144166666666667, 0.9168\n",
      "train acc, test acc | 0.9195666666666666, 0.9212\n",
      "train acc, test acc | 0.9248166666666666, 0.926\n",
      "train acc, test acc | 0.9273333333333333, 0.9288\n",
      "train acc, test acc | 0.9308833333333333, 0.9329\n",
      "train acc, test acc | 0.9342666666666667, 0.9349\n",
      "train acc, test acc | 0.9372666666666667, 0.9375\n",
      "train acc, test acc | 0.9393333333333334, 0.9388\n",
      "train acc, test acc | 0.9424, 0.9417\n",
      "train acc, test acc | 0.9439333333333333, 0.9428\n",
      "train acc, test acc | 0.9453833333333334, 0.9442\n",
      "train acc, test acc | 0.94705, 0.9465\n"
     ]
    },
    {
     "data": {
      "image/png": "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u5ORkVF7fE64/Oc//6G4uJhp06bRv39/OnfufMRWnh49erB06VL8fv8Rr4+Pj6ddu3Z8+OGHYc11PCo3YVIdCJJm7gUgMb2dtWFERCQitWvXjs8++4wtW7ZQXFx81C0qAB06dOCtt94iPz+fr776ihtuuOGY4xuiTZs2uFwunn32WTZt2sT8+fN55JFH6oy54447KC0t5brrruOLL77g22+/5a9//Svr168H4KGHHmL69Ok888wzfPvtt3z55Zc8++yzYc35Qyo3YVK0v4xUSgBITG9rcRoREYlEd911F3a7na5du9buAjqaP/zhD7Rq1Yo+ffowdOhQBg0axNlnnx3WPGlpabz44ou8/vrrdO3alWnTpvH73/++zpiUlBQWLVpEeXk5AwYMoFevXvz5z3+u3f1188038/TTTzNr1iy6devGT37yE7799tuw5vwhwzzRE/CjRGlpKYmJiZSUlJCQkBC2962srOK/Kz8gWLKDM3/ya9AkfiIilqmqqmLz5s3k5OTg8XisjiMn6Fg/t5P5+x3ZR1c1I16vh+4X/MzqGCIiIi2edkuJiIhIVFG5ERERkaiiciMiIiJRReVGREREoorKjYiIiEQVlRsRERGJKio3IiIiElVUbkRERCSqqNyIiIhIVFG5ERERaSYuvPBCxo0bF9b3HDlyJFdeeWVY37O5U7kRERGRqKJyIyIiLYev4ug3f9VJjK08sbEnYeTIkSxZsoQZM2ZgGAaGYbBlyxYA1q5dy5AhQ4iLiyM9PZ2bbrqJ4uLi2te+8cYbdO/eHa/XS0pKCpdeeikVFRU89NBD/O///i//+Mc/at9z8eLF9X7++++/T79+/UhKSiIlJYWf/OQnbNy4sc6Y7du3c91115GcnExsbCy9e/fms88+q31+/vz59O7dG4/HQ2pqKldfffVJfQ/CRRfOFBGRluOxrKM/13Eg/OL17x4/2QH8B+sf27Yf/PK97x4/3R0O7j1y3EMlJxxtxowZbNiwgdzcXKZMmQJAWloahYWFDBgwgF/96lc89dRTVFZWcs899zBs2DAWLVpEYWEh119/PU888QRXXXUVZWVlLF26FNM0ueuuu1i3bh2lpaW88MILACQnJ9f7+RUVFUyYMIHu3btTUVHB7373O6666iry8/Ox2WyUl5czYMAATjvtNObPn09GRgZffvkloVAIgPfee4+r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5ORkXC6XVbFP2PF+hj8sa06nk4yMDDp16tTUURvseOs4ceJEhg8fzgUXXMBFF13E+++/z7vvvsvixYsbP5wl52hFoT/+8Y9m27ZtTZfLZZ599tlRdZo0UO/thRdesDpao4m2U8FN0zTfffddMzc313S73Wbnzp3NOXPmWB0pbEpLS82xY8eabdq0MT0ej9m+fXtz8uTJZnV1tdXRGuSjjz6q9/+5m2++2TTNmtPBH3zwQTMjI8N0u93mBRdcYK5Zs8ba0CfpWOu4efPmo/7e+eijj6yOfkKO9zP8oUg8FfxE1vH55583O3ToYHo8HrNnz57mO++80yTZDNM0zcavUCIiIiJNQ8fciIiISFRRuREREZGoonIjIiIiUUXlRkRERKKKyo2IiIhEFZUbERERiSoqNyIiIhJVVG5EpMVZvHgxhmFw4MABq6OISCNQuREREZGoonIjIiIiUUXlRkSanGmaPPHEE7Rv3x6v10vPnj154403gO92Gb333nv07NkTj8fDeeedx5o1a+q8x5tvvkm3bt1wu920a9eO6dOn13m+urqau+++m+zsbNxuNx07duT555+vM2bVqlX07t2bmJgY+vTpU+cKxl999RUXXXQR8fHxJCQk0KtXL7744otG+o6ISDjpquAi0uTuv/9+3nrrLWbPnk3Hjh35+OOPufHGG0lLS6sdM3HiRGbMmEFGRgb33XcfP/3pT9mwYQNOp5NVq1YxbNgwHnroIYYPH87y5cv5zW9+Q0pKCiNHjgRgxIgRrFixgmeeeYaePXuyefNmiouL6+SYPHky06dPJy0tjVGjRnHLLbewbNkyAH7xi19w1llnMXv2bOx2O/n5+Tidzib7HonIKWiSy3OKiBxSXl5uejwec/ny5XWW33rrreb1119fe6Xh1157rfa5vXv3ml6v15w3b55pmqZ5ww03mJdddlmd10+cONHs2rWraZqmuX79ehMw8/Ly6s1w+DP+9a9/1S577733TMCsrKw0TdM04+PjzRdffPHUV1hEmpx2S4lIk1q7di1VVVVcdtllxMXF1d5eeuklNm7cWDvu/PPPr72fnJxMp06dWLduHQDr1q2jb9++dd63b9++fPvttwSDQfLz87Hb7QwYMOCYWXr06FF7PzMzE4CioiIAJkyYwG233call17KtGnT6mQTkeZN5UZEmlQoFALgvffeIz8/v/a2du3a2uNujsYwDKDmmJ3D9w8zTbP2vtfrPaEs39/NdPj9Dud76KGH+Oabb7jiiitYtGgRXbt25e233z6h9xURa6nciEiT6tq1K263m4KCAjp06FDnlp2dXTvu008/rb2/f/9+NmzYQOfOnWvf45NPPqnzvsuXL+eMM87AbrfTvXt3QqEQS5YsOaWsZ5xxBuPHj2fhwoVcffXVvPDCC6f0fiLSNHRAsYg0qfj4eO666y7Gjx9PKBSiX79+lJaWsnz5cuLi4mjbti0AU6ZMISUlhfT0dCZPnkxqaipXXnklAHfeeSfnnHMOjzzyCMOHD2fFihXMnDmTWbNmAdCuXTtuvvlmbrnlltoDirdu3UpRURHDhg07bsbKykomTpzItddeS05ODtu3b2flypVcc801jfZ9EZEwsvqgHxFpeUKhkDljxgyzU6dOptPpNNPS0sxBgwaZS5YsqT3Y99133zW7detmulwu85xzzjHz8/PrvMcbb7xhdu3a1XQ6nWabNm3MJ598ss7zlZWV5vjx483MzEzT5XKZHTp0MOfOnWua5ncHFO/fv792/OrVq03A3Lx5s1ldXW1ed911ZnZ2tulyucysrCzzjjvuqD3YWESaN8M0v7ejWkTEYosXL+aiiy5i//79JCUlWR1HRCKQjrkRERGRqKJyIyIiIlFFu6VEREQkqmjLjYiIiEQVlRsRERGJKio3IiIiElVUbkRERCSqqNyIiIhIVFG5ERERkaiiciMiIiJRReVGREREoorKjYiIiESV/w+sBFOdEpTBKAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import sys, os\n",
    "sys.path.append(os.pardir)  # 親ディレクトリのファイルをインポートするための設定\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from dataset.mnist import load_mnist\n",
    "\n",
    "# データの読み込み\n",
    "(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)\n",
    "\n",
    "network = TwoLayerNet(input_size=784, hidden_size=50, output_size=10)\n",
    "\n",
    "iters_num = 10000  # 繰り返しの回数を適宜設定する\n",
    "train_size = x_train.shape[0]\n",
    "batch_size = 100\n",
    "learning_rate = 0.1\n",
    "\n",
    "train_loss_list = []\n",
    "train_acc_list = []\n",
    "test_acc_list = []\n",
    "\n",
    "iter_per_epoch = max(train_size / batch_size, 1)\n",
    "\n",
    "for i in range(iters_num):\n",
    "    batch_mask = np.random.choice(train_size, batch_size)\n",
    "    x_batch = x_train[batch_mask]\n",
    "    t_batch = t_train[batch_mask]\n",
    "    \n",
    "    # 勾配の計算\n",
    "    #grad = network.numerical_gradient(x_batch, t_batch)\n",
    "    grad = network.gradient(x_batch, t_batch)\n",
    "    \n",
    "    # パラメータの更新\n",
    "    for key in ('W1', 'b1', 'W2', 'b2'):\n",
    "        network.params[key] -= learning_rate * grad[key]\n",
    "    \n",
    "    loss = network.loss(x_batch, t_batch)\n",
    "    train_loss_list.append(loss)\n",
    "    \n",
    "    if i % iter_per_epoch == 0:\n",
    "        train_acc = network.accuracy(x_train, t_train)\n",
    "        test_acc = network.accuracy(x_test, t_test)\n",
    "        train_acc_list.append(train_acc)\n",
    "        test_acc_list.append(test_acc)\n",
    "        print(\"train acc, test acc | \" + str(train_acc) + \", \" + str(test_acc))\n",
    "\n",
    "# グラフの描画\n",
    "markers = {'train': 'o', 'test': 's'}\n",
    "x = np.arange(len(train_acc_list))\n",
    "plt.plot(x, train_acc_list, label='train acc')\n",
    "plt.plot(x, test_acc_list, label='test acc', linestyle='--')\n",
    "plt.xlabel(\"epochs\")\n",
    "plt.ylabel(\"accuracy\")\n",
    "plt.ylim(0, 1.0)\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "dezero:Python",
   "language": "python",
   "name": "conda-env-dezero-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
